package com.synergy.stockflow.production.controller;


import com.synergy.stockflow.model.Result;
import com.synergy.stockflow.production.entity.ProductionTask;
import com.synergy.stockflow.production.service.ProductionTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/schedule")
public class ProductionScheduleController {

    @Autowired
    private ProductionTaskService productionTaskService;

    @GetMapping("/task")
    public Result<List<ProductionTask>> getTask(String processId) {
        List<ProductionTask> productionTasks = productionTaskService.selectTaskAndWorkstation(processId);
        return Result.success(productionTasks);
    }

    @PostMapping("/addtask")
    public Result addTask(@RequestBody ProductionTask productionTask) {
        // 验证必需字段
        if (productionTask.getTaskName() == null || productionTask.getTaskName().trim().isEmpty()) {
            return Result.error(500,"任务名称不能为空");
        }

        if (productionTask.getWorkstationId() == null || productionTask.getWorkstationId().trim().isEmpty()) {
            return Result.error(500,"工作站不能为空");
        }

        if (productionTask.getTaskQuantity() == null || productionTask.getTaskQuantity().compareTo(BigDecimal.ZERO) <= 0) {
            return Result.error(500,"排产数量必须大于0");
        }
        // 设置任务ID（如果前端没有传）
        if (productionTask.getTaskId() == null || productionTask.getTaskId().isEmpty()) {
            productionTask.setTaskId(generateTaskId()); // 需要实现生成ID的方法
        }
        productionTask.setComputedQuantity(BigDecimal.valueOf(0.0));
        // 计算结束时间：开始时间 + 生产时长 + 7小时
        if (productionTask.getStartDate() != null && productionTask.getProductionTime() != null) {
            // 使用 Calendar 或 Instant 进行时间计算
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(productionTask.getStartDate());
            calendar.add(Calendar.HOUR, productionTask.getProductionTime() + 7);
            productionTask.setEndDate(calendar.getTime());
        }
        productionTask.setCreateTime(new Date());
        productionTask.setUpdateTime(new Date());
      return Result.success(productionTaskService.save(productionTask));
    }

    // 生成任务ID的辅助方法
    private String generateTaskId() {
        return "TASK_" + System.currentTimeMillis() + "_" + (int)(Math.random() * 1000);
    }

    @PutMapping("/updatetask")
    public Result updateTask(@RequestBody ProductionTask productionTask) {
        productionTask.setUpdateTime(new Date());
        // 计算结束时间：开始时间 + 生产时长 + 7小时
        if (productionTask.getStartDate() != null && productionTask.getProductionTime() != null) {
            // 使用 Calendar 或 Instant 进行时间计算
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(productionTask.getStartDate());
            calendar.add(Calendar.HOUR, productionTask.getProductionTime() + 7);
            productionTask.setEndDate(calendar.getTime());
        }
        return Result.success(productionTaskService.updateById(productionTask));
    }


    @DeleteMapping("/deletetask")
    public Result deleteTask(@RequestBody List<String> taskIds) {
        return Result.success(productionTaskService.removeBatchByIds(taskIds));
    }

}
